load("@rules_rust//rust:defs.bzl", "rust_doc", "rust_library", "rust_test")

package(default_visibility = ["//ffi/rust_calling_c:__subpackages__"])

rust_library(
    name = "matrix",
    srcs = [
        "src/ffi.rs",
        "src/matrix.rs",
    ],
    deps = [
        "//ffi/rust_calling_c/c:native_matrix",
        "@libc",
    ],
)

rust_test(
    name = "matrix_test",
    crate = ":matrix",
)

rust_doc(
    name = "matrix_doc",
    crate = ":matrix",
)

## Do the same as above, but with a dynamic c library.

rust_library(
    name = "matrix_dynamically_linked",
    srcs = [
        "src/ffi.rs",
        "src/matrix.rs",
    ],
    crate_root = "src/matrix.rs",
    target_compatible_with = select({
        # TODO: Make this work on windows
        "@platforms//os:windows": ["@platforms//:incompatible"],
        "//conditions:default": [],
    }),
    deps = [
        "//ffi/rust_calling_c/c:native_matrix_so",
        "@libc",
    ],
)

rust_test(
    name = "matrix_dylib_test",
    crate = ":matrix_dynamically_linked",
    target_compatible_with = select({
        # TODO: This test requires --incompatible_macos_set_install_name and Bazel 4.2.0+
        "@platforms//os:macos": ["@platforms//:incompatible"],
        # TODO: Make this work on windows
        "@platforms//os:windows": ["@platforms//:incompatible"],
        "//conditions:default": [],
    }),
)

rust_doc(
    name = "matrix_dylib_doc",
    crate = ":matrix_dynamically_linked",
)
